// src/services/recommendationService.ts
import apiClient from './apiConfig';

// 推荐服务API
class RecommendationService {
  /**
   * 获取用户推荐菜谱（前5个）
   * @param userId 用户ID
   * @returns 推荐菜谱列表
   */
  static async getTop5Recommendations(userId: string): Promise<any[]> {
    try {
      const response = await apiClient.get(`/recommendations/user/${userId}`);
      console.log('推荐接口原始返回数据:', response.data);
      
      // 处理推荐接口返回的数据
      let recipes: any[] = [];
      
      // 如果直接返回的是数组
      if (Array.isArray(response.data)) {
        recipes = response.data;
      } 
      // 如果返回的是对象，尝试提取其中的数组字段
      else if (response.data && typeof response.data === 'object') {
        // 常见的数组字段名
        const arrayFieldNames = ['recipes', 'data', 'results', 'items', 'list'];
        
        // 首先尝试查找明确的数组字段
        for (const fieldName of arrayFieldNames) {
          if (Array.isArray(response.data[fieldName])) {
            recipes = response.data[fieldName];
            break;
          }
        }
        
        // 如果没找到明确的数组字段，遍历所有字段查找数组
        if (recipes.length === 0) {
          for (const key in response.data) {
            if (Array.isArray(response.data[key])) {
              recipes = response.data[key];
              console.log(`从字段 '${key}' 找到推荐数据数组`);
              break;
            }
          }
        }
        
        // 如果仍然没找到数组，将整个对象作为一个元素
        if (recipes.length === 0) {
          recipes = [response.data];
          console.log('将整个响应对象作为单个菜谱处理');
        }
      }
      // 如果返回的是其他类型，创建一个包含该值的数组
      else {
        recipes = [response.data];
      }
      
      console.log('处理后的推荐数据:', recipes);
      return recipes;
    } catch (error) {
      console.error('获取推荐失败:', error);
      throw error;
    }
  }
}

export default RecommendationService;